package bishiqinagxun;
import java.util.*;
public class Test2 {

    //题目 :笔试强训 day28  第二题  体操队形
    //算法  递归  dfs
    private static int N = 11;
    public static int n, ret;
    public static boolean[] flg = new boolean[N];
    public static int[] arr = new int[N];
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //输入
        n = in.nextInt();
        for(int i = 1; i<= n;i++) {
            arr[i] = in.nextInt();
        }
        dfs(1);
        System.out.println(ret);
    }

    private static void dfs(int dext) {
        if(dext == n+1) {
            ret++;
            return;
        }

        for(int i = 1; i <= n; i++) {
            //如果已经放过了 就不能再放
            if(flg[i] == true) {
                continue;
            }

            if(flg[arr[i]] == true) {
                return;   //如果诉求已经放了 就直接  不用往下走了
            }

            flg[i] = true;
            //继续下一层
            dfs(dext+1);
            //返回上一层的时候要恢复原来的样子
            flg[i] = false;
        }
    }
}
